'''
名称：娃娃鱼自动化运维-检测mac对照执行增加删除
作者：颜涛
时间：2018/5/19
'''
#引入模块
import time,csv,os,paramiko,ftplib,re,datetime
from itertools import islice
import ssh as sshs
#连接信息
host = '192.168.4.1'
username = 'admin1234'
password = '**********'

#以二进制形式下载文件
def ftp_download():
    f = ftplib.FTP(host)  # 实例化FTP对象
    print("重新下载配置文件到本地。。。")
    sshs.ssh2(host, username, password) #重新生成新的配置文件
    f.login(username, password)  # 登录
    file_remote = 'mac.csv' #下载文件
    file_local = 'D:\\mac.txt' #本地目录
    bufsize = 1024  # 设置缓冲器大小
    fp = open(file_local, 'wb')
    f.retrbinary('RETR %s' % file_remote, fp.write, bufsize)
    fp.close()
    f.quit()
#获取文件时间，并加上一小时进行判断文件是否过期，如过期，重新下载文件
if os.path.exists('D:\\mac.txt') == False:
    print("文件不存在，即将下载最新文件")
    ftp_download()
else:
    #查看文件修改时间
    date_A = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(os.stat('D:\\mac.txt').st_mtime))
    dayA= datetime.datetime.strptime(date_A, '%Y-%m-%d  %H:%M:%S')
    #增加时间
    delta=datetime.timedelta(hours=1)
    dayB=dayA+delta
    #判断时间是否过期
    if str(dayB) < str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")):
        print("文件过期，重新导入配置")
        #下载最新文件
        ftp_download()
    else:
        print("文件未过期，开始检测删除和增加地址")
time.sleep(5)
#正则文件ip地址和mac进行存放到m数组内
mac = open('D:\\mac.txt').read() #主文件
cvsone = re.findall('user-bind static ip-address (192\.168\..*\..*) mac-address (.*-.*-.*)',mac)
#读取本地csv文件并保存到rows数组内
with open("Z:\\mac\\auto-mac.csv", "r") as f:
    reader = csv.reader(f)
    rows = [row[0] for row in reader]
with open("Z:\\mac\\auto-mac.csv", "r") as f:
    reader = csv.reader(f)
    rowa = [row[1] for row in reader]
m = []
k = []
for s in range(len(rows)):
    k.append([rows[s],rowa[s]])
for s in range(len(cvsone)):
    m.append([cvsone[s][0],cvsone[s][1]])
#数组对比，删除的数据
for c in range(len(m)):
    if m[c] not in k:
        #数据MAC已被删除，进行ssh连接删除mac绑定
        sshs.delete(host, username, password,m[c][0],m[c][1])
        print("Flase:" + m[c][0] + '-' + m[c][1])
#数组对比，增加的数据
for c in range(len(rows)):
    if k[c] not in m:
        #数据MAC地址增加，增加绑定
        sshs.update(host, username, password,k[c][0],k[c][1])
        print("True:" + k[c][0] + '-' + k[c][1])
print("增加删除MAC地址处理完毕")
print("即将退出程序")
time.sleep(5)
